package com.bestcem.xm.member.dao.mapper;

import com.bestcem.xm.member.entity.mysql.ImportRecordEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 导入记录mapper
 *
 * @author yf.wang <yf.wang@idiaoyan.com>
 * @version V1.0
 * @date 2021/9/15
 */
@Mapper
public interface ImportRecordMapper {

    /**
     * 根据 组织id userId attribute 获取 记录的数量
     *
     * @param orgId
     * @param userId
     * @param attributes
     * @return
     */
    Long countByOrgIdAndUserIdAndAttributeIn(@Param("orgId") String orgId,
                                             @Param("userId") String userId,
                                             @Param("attributes") List<Integer> attributes);

    /**
     * 分页 根据 组织id userId attribute 获取 记录列表
     *
     * @param orgId
     * @param userId
     * @param attributes
     * @param start
     * @param size
     * @return
     */
    List<ImportRecordEntity> findPageByOrgIdAndUserIdAndAttributeIn(@Param("orgId") String orgId,
                                                                    @Param("userId") String userId,
                                                                    @Param("attributes") List<Integer> attributes,
                                                                    @Param("start") Integer start,
                                                                    @Param("size") Integer size);

    /**
     * 根据id获取导入记录
     *
     * @param id
     * @return
     */
    ImportRecordEntity findOneById(@Param("id") String id);

    /**
     * 根据id 更新 导入记录状态
     * @param id
     * @param status
     */
    void updateStatusById(@Param("id") String id, @Param("status") Integer status);

    /**
     * 创建导入记录
     *
     * @param record
     */
    void createImportRecord(ImportRecordEntity record);

    /**
     * 根据id 更新文件名称
     *
     * @param recordId
     * @param fileName
     */
    void updateFileNameById(@Param("id") String recordId, @Param("fileName") String fileName, @Param("updatedTime") Date updatedTime);

    /**
     * 根据id 更新数量
     *
     * @param recordId
     * @param receiveCount
     * @param successCount
     * @param failedCount
     */
    void updateCountById(@Param("id") String recordId,
                         @Param("receiveCount") Integer receiveCount,
                         @Param("successCount") Integer successCount,
                         @Param("failedCount") Integer failedCount,
                         @Param("status") int status,
                         @Param("updatedTime") Date updatedTime);

    void batchSave(@Param("list") List<ImportRecordEntity> entities);

    void insertTest(ImportRecordEntity entity);
}
